package com.caesar.exer2_2;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/**
 * @author caesar
 * @date 2025/7/18
 * @Description:## 统计字母次数
 * 开发提示：可以使用Map，key是字母，value是该字母的次数
 * 效果演示：例如：String str = "Your future depends on your dreams, so go to sleep.";
 * @apiNote
 */
public class exer1 {
    public static void main(String[] args) {
        //分别找出每个字母出现的次数
        String str = "Your future depends on your dreams, so go to sleep.";
        str = str.replaceAll("[^a-zA-Z]", "");//去掉非字母的字符
        char[] chars = str.toCharArray();
        HashMap<Character,Integer> map = new HashMap<>();
        for (char c : chars) {
            if (map.containsKey(c)) {
                map.put(c,map.get(c)+1);
            } else {
                map.put(c,1);
            }
        }
        System.out.println(map);
        //找最多次数的字母
        //这里的思路是翻转，为了求最大次数对应的字母，所以把次数作为key值，Value值是次数对应的字母
        Set<Map.Entry<Character,Integer>> entrySet = map.entrySet();
        TreeMap<Integer,String> tree = new TreeMap<>();
        for (Map.Entry<Character,Integer> entry : entrySet) {
            //System.out.println(entry);
            Integer count = entry.getValue();
            if(tree.containsKey(count)){
                //如果这个次数已经存在，那么我们使用replace方法进行修改，key不变，然后Value值修改为原来的值+当前字母
                tree.replace(count,tree.get(count)+"," + entry.getKey());
            }else{//这个次数没有添加到新的map里面，就添加进去，value值是对应的字母
                tree.put(count, entry.getKey()+"");
            }
        }
        Map.Entry<Integer, String> maxEntry = tree.pollLastEntry();
        System.out.println(maxEntry.getValue()+"字母出现次数最多，出现次数为" + maxEntry.getKey());
    }
}
